λ€μν κΈλ‘λ² νκ²½μμ κ΅μ‘ νκ°μ μ λ’°μ±, μ ν¨μ± λ° λ³΄μμ ν₯μμν€κΈ° μν μΌλ° νκ° μμ€ν (GAS)μ μ ν μμ μ±μ μ€μν μν νꡬ.
μΌλ° νκ° μμ€ν : κ΅μ‘ νκ° μ ν μμ μ± λ³΄μ₯
μ μ  λ μνΈ μ°κ²°λλ κ΅μ‘ νκ²½μμ κ°λ ₯νκ³ μ λ’°ν μ μμΌλ©° μ μ κ°λ₯ν νκ° μμ€ν μ νμμ±μ΄ κ°μ₯ μ€μν©λλ€. μΌλ° νκ° μμ€ν (GAS)μ μ΄ λͺ©νλ₯Ό λ¬μ±νκΈ° μν μ€μν λ¨κ³μ λλ€. μ΄λ λ€μν κ³Όλͺ©, κΈ°μ μμ€ λ° κ΅μ‘ νκ²½μμ νκ°λ₯Ό μμ±νκ³ λ°°ν¬νκΈ° μν νλ μμν¬λ₯Ό μ 곡ν©λλ€. κ·Έλ¬λ GASμ μ μ°μ±κ³Ό κ΅¬μ± κ°λ₯μ±μ μ ν μμ μ±μ 보μ₯νλ λ° μμ΄ μ€μν κ³Όμ λ₯Ό μ μν©λλ€. νκ° λ§₯λ½μμ μ ν μμ μ±μ νΈνλμ§ μλ λ°μ΄ν° μ ν λλ μμ μΌλ‘ μΈν΄ λ°μνλ μ€λ₯λ₯Ό λ°©μ§νμ¬ νκ° νλ‘μΈμ€μ 무결μ±κ³Ό μ ν¨μ±μ 보νΈνλ μμ€ν μ λ₯λ ₯μ μλ―Έν©λλ€. μ΄ κΈ°μ¬μμλ GAS λ΄μμ μ ν μμ μ± κ°λ μ μ΄ν΄λ³΄κ³ κ·Έ μ€μμ±, ꡬν μ λ΅ λ° κΈλ‘λ² κ΅μ‘μ λν μλ―Έλ₯Ό κ°μ‘°ν©λλ€.
μΌλ° νκ° μμ€ν (GAS)μ΄λ 무μμ λκΉ?
μΌλ° νκ° μμ€ν μ κ΅μ‘ νκ°λ₯Ό μμ±, μ 곡 λ° λΆμνλλ‘ μ€κ³λ μννΈμ¨μ΄ νλ«νΌμ λλ€. νΉμ  κ³Όλͺ© λλ 컀리νλΌμ λ§μΆ°μ§ λ§μΆ€ν νκ° μ루μ κ³Ό λ¬λ¦¬ GASλ κ΄λ²μν κ΅μ‘ μμμμ μ μ κ°λ₯νκ³ μ¬μ¬μ© κ°λ₯νλλ‘ μ€κ³λμμ΅λλ€. μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ κΈ°λ₯μ μ 곡ν©λλ€.
- λ¬Έν λ± νΉ: κ΄λ ¨ λ©νλ°μ΄ν°κ° ν¬ν¨λ νκ° λ¬Έν(μ§λ¬Έ, μμ λ±)μ μ μ₯ λ° κ΄λ¦¬.
 - μν ꡬμ±: 미리 μ μλ κΈ°μ€(μ: λμ΄λ, λ΄μ© λ²μ, μ²μ¬μ§ μ¬μ)μ λ°λ₯Έ μλ λλ λ°μλ μν μμ±.
 - μν μ 곡: νμλ€μκ² μμ ν μ¨λΌμΈ λλ μ€νλΌμΈ νκ° μ 곡.
 - μ±μ  λ° λ³΄κ³ : μλ΅ μλ μ±μ  λ° νμ μ±μ μ λν λ³΄κ³ μ μμ±.
 - μ μν ν μ€νΈ: νμ μλ΅μ λ°λΌ μ§λ¬Έ λμ΄λλ₯Ό λμ μΌλ‘ μ‘°μ .
 - μ κ·Όμ± κΈ°λ₯: μ€ν¬λ¦° 리λ, ν€λ³΄λ νμ λ° μ΄λ―Έμ§μ λν λ체 ν μ€νΈλ₯Ό ν¬ν¨νμ¬ μ₯μ κ° μλ νμ μ§μ.
 - μνΈ μ΄μ©μ±: QTI(Question and Test Interoperability)μ κ°μ νμ€μ ν΅ν΄ λ€λ₯Έ κ΅μ‘ μμ€ν (μ: νμ΅ κ΄λ¦¬ μμ€ν , νμ μ 보 μμ€ν )κ³Ό ν΅ν©νλ κΈ°λ₯.
 
GASμ μ½μμ κ°λ° λΉμ©μ μ€μ΄κ³ νκ° νμ§μ κ°μ νλ©° λ°μ΄ν° κΈ°λ° μμ¬ κ²°μ μ μ΄μ§ν μ μλ€λ μ μ¬λ ₯μ μμ΅λλ€. λνμ΄ λμΌν GAS νλ«νΌμ μ¬μ©νμ¬ λ¬Όλ¦¬ν, λ¬Έν λ° κ³΅νμμ νκ°λ₯Ό κ΄λ¦¬νμ¬ μΌκ΄λ νμ€κ³Ό κ°μνλ μν¬νλ‘λ₯Ό 보μ₯νλ€κ³ μμν΄ λ³΄μμμ€. λλ λ€κ΅μ  κΈ°μ μ΄ GASλ₯Ό μ¬μ©νμ¬ μ¬λ¬ κ΅κ°μ μ§μ κΈ°μ μ νκ°νμ¬ κ΅μ‘ μꡬ μ¬νμ μλ³νκ³ μ§ν μν©μ μΌκ΄λκ² μΆμ ν μ μλ€κ³ μκ°ν΄ 보μμμ€.
GASμμ μ ν μμ μ±μ μ€μμ±
GASμ μ ν μμ μ±μ νκ°μ 무결μ±κ³Ό μ ν¨μ±μ μ μ§νλ λ° μ€μν©λλ€. μμ€ν μ΄ μ ν μμ νμ§ μμΌλ©΄ νκ° νλ‘μΈμ€λ₯Ό μμμν€κ³ λΆμ νν κ²°κ³Όλ₯Ό μ΄λν μ μλ μ€λ₯μ μ·¨μ½ν΄μ§λλ€. μ ν μμ μ±μ΄ μ€μν μ΄μ λ λ€μκ³Ό κ°μ΅λλ€.
1. λ°μ΄ν° μμ λ°©μ§
νκ°μλ μ’ μ’ μ«μ(μ μ), ν μ€νΈ(λ΅λ³), λΆμΈ κ°(μ°Έ/κ±°μ§ μ§λ¬Έ) λ° λ©ν°λ―Έλμ΄ μ½ν μΈ (μ΄λ―Έμ§, λΉλμ€)μ κ°μ λ€μν λ°μ΄ν° μ νμ΄ ν¬ν¨λ©λλ€. μ ν μμ νμ§ μμ μμ€ν μ μ€μλ‘ μ΄λ¬ν λ°μ΄ν° μ νμ νΌν©νμ¬ λ°μ΄ν° μμμ μ΄λν μ μμ΅λλ€. μλ₯Ό λ€μ΄ μμ€ν μ΄ ν μ€νΈ λ¬Έμμ΄μ μ«μ μ μμ μΆκ°νλ €κ³ μλνμ¬ μ€λ₯κ° λ°μνκ±°λ λ λμ κ²½μ° μλͺ»λ μ μκ° λ°μν μ μμ΅λλ€. μ΄λ νκ° κ²°κ³Όμ μ λ’°μ±μ ν° μν₯μ λ―ΈμΉ μ μμ΅λλ€.
2. μ±μ  μ νλ 보μ₯
μ±μ  μκ³ λ¦¬μ¦μ κ³μ°μ μ¬λ°λ₯΄κ² μννκΈ° μν΄ νΉμ  λ°μ΄ν° μ νμ μμ‘΄ν©λλ€. μμ€ν μμ νΈνλμ§ μλ λ°μ΄ν° μ νμ μ΄λ¬ν κ³μ°μ μ¬μ©ν μ μλλ‘ νμ©νλ©΄ μ±μ μ΄ λΆμ νν΄μ§λλ€. μλ₯Ό λ€μ΄ μ±μ  μκ³ λ¦¬μ¦μ΄ μμΈμ΄ κΈΈμ΄μ λν μ«μ κ°μ μμνμ§λ§ ν μ€νΈ λ¬Έμμ΄μ λ°μΌλ©΄ κΈΈμ΄ κ³μ°μ΄ 무μλ―Έν΄μ Έ μμΈμ΄μ μ 체 μ μμ μν₯μ λ―ΈμΉ©λλ€. μ΄λ 볡μ‘ν μκ³ λ¦¬μ¦μ΄ μλ©΄ μλ΅μ νμ§μ νκ°νλ λ° μ¬μ©λλ μλ μμΈμ΄ μ±μ (AES) μμ€ν μμ νΉν λ¬Έμ κ° λ©λλ€. λ°μ΄ν° μ νμ μ½κ°μ λ³λλ κ²°κ³Όκ° μ곑λμ΄ νμλ€μκ² λΆκ³΅ννκ² λΆμ΄μ΅μ μ€ μ μμ΅λλ€.
3. μν 보μ μ μ§
μ ν μμ μ±μ μν 보μμ μ μ§νλ λ° μ€μν μν μ ν©λλ€. μ ν κ΄λ ¨ μ€λ₯λ‘ μΈν΄ λ°μνλ μ·¨μ½μ μ μ μμ μΈ νμμκ° λ³΄μ μ‘°μΉλ₯Ό μ°ννκ±°λ νκ° λ°μ΄ν°μ λν λ¬΄λ¨ μ‘μΈμ€λ₯Ό μ»κΈ° μν΄ μ μ©ν μ μμ΅λλ€. μλ₯Ό λ€μ΄ μ ν μμ νμ§ μμ μμ€ν μ μ¬μ©μκ° λ°μ΄ν°λ² μ΄μ€ 쿼리μμ λμ€μ μ¬μ©λλ ν μ€νΈ νλμ μ μ± μ½λλ₯Ό μ½μ νμ¬ μ 체 μμ€ν μ μμμν¬ μ μμ΅λλ€. μ ν μμ μ±μ λ°μ΄ν°κ° μμΈ‘ κ°λ₯νκ³ μ μ΄λ λ°©μμΌλ‘ μ²λ¦¬λλλ‘ νμ¬ μ΄λ¬ν μ·¨μ½μ μ λ°©μ§νκ³ λ³΄μ μΉ¨ν΄ μνμ μ€μ λλ€.
4. μμ€ν  μμ μ± ν₯μ
μ ν κ΄λ ¨ μ€λ₯λ μμ€ν  μΆ©λ λλ μμμΉ λͺ»ν λμμ μΌμΌμΌ νκ° νλ‘μΈμ€λ₯Ό μ€λ¨νκ³ μ¬μ©μλ₯Ό μ’μ μν¬ μ μμ΅λλ€. μ ν μμ μ±μ μ μ©ν¨μΌλ‘μ¨ GASλ λ μμ μ μ΄κ³ μμΈ‘ κ°λ₯ν΄μ Έ μ€λ₯ μνμ μ΅μννκ³ μνν μ¬μ©μ κ²½νμ 보μ₯ν μ μμ΅λλ€. μ΄λ μμ€ν  μ€λ₯κ° νμκ³Ό κΈ°κ΄μ μ¬κ°ν κ²°κ³Όλ₯Ό μ΄λν μ μλ μ€μν νκ°μμ νΉν μ€μν©λλ€. μμ μ μΈ μμ€ν μ νκ° κ²°κ³Όμ λν μ λ’°μ νμ μ μ¬μ΄μ€λλ€.
5. μνΈ μ΄μ©μ± μ΄μ§
GASκ° λ€λ₯Έ κ΅μ‘ μμ€ν κ³Ό μ μ  λ ν΅ν©λ¨μ λ°λΌ μ ν μμ μ±μ μνΈ μ΄μ©μ±μ 보μ₯νλ λ° νμμ μ λλ€. λ€λ₯Έ μμ€ν μ λ€λ₯Έ λ°μ΄ν° μ ν λλ νμμ μ¬μ©ν μ μμΌλ©° μ ν μμ νμ§ μμ GASλ μ΄λ¬ν μμ€ν κ³Ό μννκ² λ°μ΄ν°λ₯Ό κ΅ννλ λ° μ΄λ €μμ κ²ͺμ μ μμ΅λλ€. μ΄λ ν΅ν© λ¬Έμ  λ° λ°μ΄ν° λΆμΌμΉλ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ ν μμ μ±μ μ μ©ν¨μΌλ‘μ¨ GASλ λ°μ΄ν°κ° μΌκ΄λκ³ μμΈ‘ κ°λ₯ν λ°©μμΌλ‘ κ΅νλλλ‘ λ³΄μ₯νμ¬ μνΈ μ΄μ©μ±μ μ΄μ§νκ³ μ¬λ¬ μμ€ν μμ μν¬νλ‘λ₯Ό κ°μνν μ μμ΅λλ€.
GASμμ μ ν κ΄λ ¨ μ€λ₯μ μ
μ ν μμ μ±μ μ€μμ±μ μ€λͺ νκΈ° μν΄ GASμμ λ°μν μ μλ μ ν κ΄λ ¨ μ€λ₯μ λ€μ μλ₯Ό κ³ λ €νμμμ€.
- μλͺ»λ λ°μ΄ν° μ λ ₯: νμμ΄ μ«μ νλμ μ«μ λμ ν μ€νΈ λ¬Έμμ΄μ μ λ ₯ν©λλ€. μμ€ν μ΄ μ λ ₯μ κ²μ¦νμ§ λͺ»νκ³ ν μ€νΈ λ¬Έμμ΄μ λν κ³μ°μ μλνμ¬ μ€λ₯κ° λ°μν©λλ€.
 - λ°μ΄ν° λ³ν μ€λ₯: μμ€ν μ΄ κ°μ ν λ°μ΄ν° μ νμμ λ€λ₯Έ λ°μ΄ν° μ νμΌλ‘(μ: λ¬Έμμ΄μμ μ μλ‘) λ³ννλ €κ³ μλνμ§λ§ μ μ¬μ μΈ λ³ν μ€λ₯λ₯Ό μ²λ¦¬νμ§ λͺ»ν©λλ€. μ΄λ‘ μΈν΄ μλͺ»λ κ° λλ μμ€ν  μΆ©λμ΄ λ°μν μ μμ΅λλ€. μλ₯Ό λ€μ΄ μ§λ¬Έμ 1μμ 10 μ¬μ΄μ μ«μ μλ΅μ΄ νμν μ μμ΅λλ€. νμμ΄ "eleven"μ μ λ ₯νκ³ μμ€ν μ΄ μλμΌλ‘ μ«μλ‘ λ³ννλ €κ³ νλ©΄ μκΈ°μΉ μμ λμμ΄λ μΆ©λμ΄ λ°μν μ μμ΅λλ€.
 - λ°°μ΄ μΈλ±μ€ λ²μ μ΄κ³Ό: μμ€ν μ΄ μλͺ»λ μΈλ±μ€(μ: μμμ΄κ±°λ λ°°μ΄ ν¬κΈ°λ³΄λ€ ν° μΈλ±μ€)λ₯Ό μ¬μ©νμ¬ λ°°μ΄μ μμμ μ‘μΈμ€νλ €κ³ μλν©λλ€. μ΄λ‘ μΈν΄ μΆ©λ λλ μμΈ‘ν μ μλ λμμ΄ λ°μν μ μμ΅λλ€. μ μν ν μ€νΈμμ μλͺ» κ³μ°λ μΈλ±μ€λ μ€μν μ§λ¬Έμ 건λλ°κ±°λ λ°λ³΅ν μ μμ΅λλ€.
 - Null ν¬μΈν° μμΈ: μμ€ν μ΄ nullμΈ(μ¦, μ‘΄μ¬νμ§ μλ) κ°μ²΄μ λ©€λ²μ μ‘μΈμ€νλ €κ³ μλν©λλ€. μ΄λ‘ μΈν΄ μΆ©λ λλ μμΈ‘ν μ μλ λμμ΄ λ°μν μ μμ΅λλ€. μλ₯Ό λ€μ΄ νμν μ§λ¬Έμ΄ μ¬λ°λ₯΄κ² λ‘λλμ§ μκ³ nullμ΄ λλ©΄ μμ€ν μ΄ ν΄λΉ μ§λ¬Έμ νμνλ €κ³ ν λ μΆ©λν μ μμ΅λλ€.
 - SQL μ½μ μ·¨μ½μ : μ μμ μΈ μ¬μ©μκ° λμ€μ λ°μ΄ν°λ² μ΄μ€ 쿼리μμ μ¬μ©λλ ν μ€νΈ νλμ SQL μ½λλ₯Ό μ½μ ν©λλ€. μμ€ν μ΄ μ λ ₯μ μμ νμ§ λͺ»νμ¬ μ μ± μ½λκ° μ€νλμ΄ λ°μ΄ν°λ² μ΄μ€λ₯Ό μμμν¬ μ μμ΅λλ€. μλ₯Ό λ€μ΄ νμμ μ½μ€ λͺ¨λμ λν μμ μ μκ°μ μ μ₯νλλ‘ μ€κ³λ μμ ν μ€νΈ μλ΅ μμμ SQL μ½λλ₯Ό μ λ ₯ν μ μμ΅λλ€.
 
GASμμ μ ν μμ μ±μ 보μ₯νκΈ° μν μ λ΅
GASμμ μ ν μμ μ±μ ꡬννλ €λ©΄ μμ€ν μ μ€κ³ λ° κ΅¬νμ λͺ¨λ λ€λ£¨λ λ€λ©΄μ μΈ μ κ·Ό λ°©μμ΄ νμν©λλ€. λ€μμ λͺ κ°μ§ μ£Όμ μ λ΅μ λλ€.
1. μ μ  νμ΄ν
μ μ  νμ΄νμλ μ»΄νμΌ μκ°(μ¦, νλ‘κ·Έλ¨μ΄ μ€νλκΈ° μ )μ λ³μ λ° ννμμ λ°μ΄ν° μ νμ μ μνλ μμ μ΄ ν¬ν¨λ©λλ€. μ΄λ₯Ό ν΅ν΄ μ»΄νμΌλ¬λ κ°λ° νλ‘μΈμ€ μ΄κΈ°μ μ ν μ€λ₯λ₯Ό κ°μ§νμ¬ νλ‘λμ μ λλ¬νμ§ λͺ»νλλ‘ ν μ μμ΅λλ€. Java, C++ λ° TypeScriptμ κ°μ μΈμ΄λ κ°λ ₯ν μ μ  νμ΄ν κΈ°λ₯μ μ 곡νλ©° μ ν μμ  GASλ₯Ό ꡬμΆνλ λ° νμ©ν μ μμ΅λλ€. μ μ  μ ν κ²μ¬κΈ°λ₯Ό μ¬μ©νλ κ²μ΄ μ€μν©λλ€. μλ₯Ό λ€μ΄ TypeScriptλ₯Ό μ¬μ©νλ©΄ GASμμ μ¬μ©λλ λͺ¨λ κ°μ²΄ λ° λ°μ΄ν° ꡬ쑰μ λν μΈν°νμ΄μ€μ μ νμ μ μν μ μμ΅λλ€. μ΄λ κ² νλ©΄ κ°λ° λ¨κ³μμ μ ν λΆμΌμΉ μ€λ₯λ₯Ό ν¨μ¬ λ 빨리 κ°μ§ν μ μμ΅λλ€.
2. μ ν¨μ± κ²μ¬μ ν¨κ» λμ  νμ΄ν
μ μ  νμ΄νκ³Ό λ¬λ¦¬ λμ  νμ΄νμλ λ°νμ(μ¦, νλ‘κ·Έλ¨μ΄ μ€νλλ λμ)μ λ°μ΄ν° μ νμ νμΈνλ μμ μ΄ ν¬ν¨λ©λλ€. λμ  νμ΄νμ λ ν° μ μ°μ±μ μ 곡νμ§λ§ μ ν κ΄λ ¨ μ€λ₯ μνλ μ¦κ°μν΅λλ€. μ΄λ¬ν μνμ μννκΈ° μν΄ λμ  νμ΄νμ λ°νμμ μ λ ₯ λ° μΆλ ₯μ λ°μ΄ν° μ νμ νμΈνλ κ°λ ₯ν μ ν¨μ± κ²μ¬ λ©μ»€λμ¦κ³Ό κ²°ν©λμ΄μΌ ν©λλ€. Python λ° JavaScriptμ κ°μ μΈμ΄λ λμ μΌλ‘ μ λ ₯λ©λλ€. μλ₯Ό λ€μ΄ Javascriptλ₯Ό μ¬μ©νλ κ²½μ° μ ν κ²μ¬ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄ μμ  κ³μΈ΅μ μΆκ°ν μ μμ΅λλ€.
3. λ°μ΄ν° μ ν¨μ± κ²μ¬ λ° μμ 
λ°μ΄ν° μ ν¨μ± κ²μ¬μλ λ°μ΄ν°κ° νΉμ  μ μ½ μ‘°κ±΄ λλ κ·μΉμ μ€μνλμ§ νμΈνλ μμ μ΄ ν¬ν¨λ©λλ€. μ¬κΈ°μλ μ«μκ° νΉμ  λ²μ λ΄μ μλμ§, ν μ€νΈ λ¬Έμμ΄μ΄ νΉμ  κΈΈμ΄μΈμ§, λ μ§κ° μ ν¨ν νμμΈμ§ νμΈνλ μμ μ΄ ν¬ν¨λ μ μμ΅λλ€. λ°μ΄ν° μμ μλ μ μ¬μ μΌλ‘ μ ν΄ν λ¬Έμ λλ μ½λλ₯Ό μ κ±°νκΈ° μν΄ λ°μ΄ν°λ₯Ό μ 리νλ μμ μ΄ ν¬ν¨λ©λλ€. μ΄λ SQL μ½μ μ·¨μ½μ μ λ°©μ§νλ λ° νΉν μ€μν©λλ€. μ λ ₯ μ ν¨μ± κ²μ¬λ ν΄λΌμ΄μΈνΈ μΈ‘(μ: λΈλΌμ°μ μμ JavaScript μ¬μ©)κ³Ό μλ² μΈ‘(μ: μλ²μμ Java λλ Python μ¬μ©) λͺ¨λμμ ꡬνν΄μΌ ν©λλ€. μ: λ°μ΄ν°λ² μ΄μ€μ μνΈ μμ©ν λλ νμ λ§€κ°λ³μνλ 쿼리 λλ μ€λΉλ λ¬Έμ μ¬μ©νμμμ€. μ΄λ κ² νλ©΄ SQL μ½μ 곡격μ λ°©μ§νλ λ° λμμ΄ λ©λλ€. μ¬μ©μ μ λ ₯μ μ²λ¦¬ν λλ μ μ¬μ μΌλ‘ μ μ± λ¬Έμ λλ μ½λλ₯Ό μ κ±°νκΈ° μν΄ νμ μμ νμμμ€. μλ₯Ό λ€μ΄ OWASP Java HTML Sanitizerμ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ HTML μ λ ₯μ μμ ν μ μμ΅λλ€.
4. μμΈ μ²λ¦¬
μμΈ μ²λ¦¬μλ νλ‘κ·Έλ¨ μ€ν μ€μ λ°μνλ μ€λ₯λ₯Ό μ μμ μΌλ‘ μ²λ¦¬νλ μμ μ΄ ν¬ν¨λ©λλ€. μ¬κΈ°μλ μ ν κ΄λ ¨ μ€λ₯λ₯Ό ν¬μ°©νκ³ μ¬μ©μμκ² μ μ΅ν μ€λ₯ λ©μμ§λ₯Ό μ 곡νλ μμ μ΄ ν¬ν¨λ μ μμ΅λλ€. μ μ ν μμΈ μ²λ¦¬λ μμ€ν  μΆ©λμ λ°©μ§νκ³ μνν μ¬μ©μ κ²½νμ 보μ₯ν©λλ€. μ μ€κ³λ μμΈ μ²λ¦¬ μ λ΅μ μΆ©λμ λ°©μ§νκ³ μ μ©ν λλ²κΉ μ 보λ₯Ό μ 곡ν μ μμ΅λλ€. μλ₯Ό λ€μ΄ μ¬μ©μ μ λ ₯μ μ«μλ‘ λ³νν λ `try-catch` λΈλ‘μ μ¬μ©νμ¬ μ μ¬μ μΈ `NumberFormatException`μ μ²λ¦¬νμμμ€.
5. λ¨μ ν μ€νΈ λ° ν΅ν© ν μ€νΈ
λ¨μ ν μ€νΈμλ μμ€ν μ κ°λ³ κ΅¬μ± μμλ₯Ό 격리νμ¬ ν μ€νΈνλ μμ μ΄ ν¬ν¨λ©λλ€. ν΅ν© ν μ€νΈμλ μ¬λ¬ κ΅¬μ± μμ κ°μ μνΈ μμ©μ ν μ€νΈνλ μμ μ΄ ν¬ν¨λ©λλ€. λ κ°μ§ μ νμ ν μ€νΈλ μ ν κ΄λ ¨ μ€λ₯λ₯Ό μλ³νκ³ μμ νλ λ° νμμ μ λλ€. μλνλ ν μ€νΈ νλ μμν¬λ ν μ€νΈ νλ‘μΈμ€λ₯Ό κ°μννλ λ° λμμ΄ λ μ μμ΅λλ€. κ° ν¨μ λλ λ©μλκ° λ€μν λ°μ΄ν° μ νμ μ¬λ°λ₯΄κ² μ²λ¦¬νλμ§ νμΈνκΈ° μν΄ λ¨μ ν μ€νΈλ₯Ό μμ±νμμμ€. λ€μν λ°μ΄ν° μ νμ μ²λ¦¬ν λλ μμ€ν μ μ¬λ¬ κ΅¬μ± μμκ° μννκ² ν¨κ» μλνλμ§ νμΈνκΈ° μν΄ ν΅ν© ν μ€νΈλ₯Ό μ¬μ©νμμμ€. νΌμ§ κΈ°μ μ μ¬μ©νμ¬ κ΄λ²μν μ μ¬μ μΌλ‘ μλͺ»λ μ λ ₯μΌλ‘ μμ€ν μ ν μ€νΈνμμμ€. μ΄λ κ² νλ©΄ μκΈ°μΉ μμ μ·¨μ½μ μ λ°κ²¬νλ λ° λμμ΄ λ μ μμ΅λλ€.
6. μ½λ κ²ν
μ½λ κ²ν μλ λ€λ₯Έ κ°λ°μκ° μ½λλ₯Ό κ²ν νμ¬ μ μ¬μ μΈ μ€λ₯λ₯Ό μλ³νλ μμ μ΄ ν¬ν¨λ©λλ€. μ΄λ λμ³€μ μ μλ μ ν κ΄λ ¨ μ€λ₯λ₯Ό ν¬μ°©νλ ν¨κ³Όμ μΈ λ°©λ²μ λλ€. λλ£ κ²ν λ λμ³€μ μ μλ μ μ¬μ μΈ μ ν κ΄λ ¨ μ€λ₯λ₯Ό μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€. μλ₯Ό λ€μ΄ μ½λ κ²ν μ€μλ λ°μ΄ν° μ νμ΄ μμμ μΌλ‘ λ³νλκ±°λ λ³μ μ νμ λν κ°μ μ΄ μ΄λ£¨μ΄μ§λ μΈμ€ν΄μ€λ₯Ό μ°ΎμΌμμμ€.
7. μ ν μμ  λΌμ΄λΈλ¬λ¦¬ λ° νλ μμν¬ μ¬μ©
μ ν μμ μ±μ μΌλμ λκ³ μ€κ³λ λΌμ΄λΈλ¬λ¦¬ λ° νλ μμν¬λ₯Ό νμ©νλ©΄ μ ν κ΄λ ¨ μ€λ₯ μνμ ν¬κ² μ€μΌ μ μμ΅λλ€. μ΄λ¬ν λΌμ΄λΈλ¬λ¦¬λ μ’ μ’ λ΄μ₯λ μ ν¨μ± κ²μ¬ λ©μ»€λμ¦ λ° μμΈ μ²λ¦¬λ₯Ό μ 곡νλ―λ‘ μ ν μμ  GASλ₯Ό λ μ½κ² κ°λ°ν μ μμ΅λλ€. μλ₯Ό λ€μ΄ ORM(κ°μ²΄-κ΄κ³ λ§€ν) λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€μ μνΈ μμ©νμμμ€. μ΄λ¬ν λΌμ΄λΈλ¬λ¦¬λ μ’ μ’ SQL μ½μ μ·¨μ½μ μ λ°©μ§νλ λ° λμμ΄ λλ μ ν μμ μ± κΈ°λ₯μ μ 곡ν©λλ€. JSON λ°μ΄ν°λ₯Ό μ¬μ©ν λλ μ€ν€λ§ μ ν¨μ± κ²μ¬ κΈ°λ₯μ μ 곡νλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμμμ€. μ΄λ κ² νλ©΄ JSON λ°μ΄ν°κ° 미리 μ μλ ꡬ쑰 λ° λ°μ΄ν° μ νμ μ€μνλμ§ νμΈν μ μμ΅λλ€.
8. 곡μ κ²μ¦
곡μ κ²μ¦μλ μνμ  κΈ°μ μ μ¬μ©νμ¬ μννΈμ¨μ΄μ μ νμ±μ μ¦λͺ νλ μμ μ΄ ν¬ν¨λ©λλ€. 곡μ κ²μ¦μ 볡μ‘νκ³ μκ°μ΄ λ§μ΄ 걸릴 μ μμ§λ§ μμ€ν μ΄ μ ν μμ νλ€λ κ°μ₯ λμ μμ€μ 보μ¦μ μ 곡ν©λλ€. GASμ μ€μν κ΅¬μ± μμμ 곡μμ μΈ λ°©λ²μ μ μ©νλ©΄ μ λ’°λμ λν λμ μ λ’°λλ₯Ό μ»μ μ μμ΅λλ€. μλ₯Ό λ€μ΄ λͺ¨λΈ κ²μ¬λ₯Ό μ¬μ©νμ¬ μμ€ν μ μν μ νμ΄ μΌκ΄λκ³ μ ν κ΄λ ¨ μ€λ₯κ° λ°μνμ§ μλμ§ νμΈνμμμ€. μ 리 μ¦λͺ μ μ¬μ©νμ¬ μμ€ν μ΄ νΉμ  μ ν μμ μ± μμ±μ 곡μμ μΌλ‘ μΆ©μ‘±νλμ§ μ¦λͺ νμμμ€.
κ΅μ  νμ€ λ° μ§μΉ¨
κ΅μ  νμ€ λ° μ§μΉ¨μ μ€μνλ©΄ GASκ° μΌκ΄λκ³ μμ μ μΈ λ°©μμΌλ‘ κ°λ° λ° λ°°ν¬λλλ‘ νλ λ° λμμ΄ λ μ μμ΅λλ€. λͺ κ°μ§ κ΄λ ¨ νμ€ λ° μ§μΉ¨μ λ€μκ³Ό κ°μ΅λλ€.
- QTI(Question and Test Interoperability): νκ° νλͺ© λ° μν κ²°κ³Όλ₯Ό κΈ°κ³κ° μ½μ μ μλ νμμΌλ‘ νννκΈ° μν νμ€.
 - IMS Global Learning Consortium: κ΅μ‘ κΈ°μ μ λν κ°λ°©ν νμ€μ κ°λ°νκ³ ν보νλ μ‘°μ§.
 - WCAG(μΉ μ½ν μΈ μ κ·Όμ± μ§μΉ¨): μ₯μ κ° μλ μ¬λμ΄ μΉ μ½ν μΈ μ μ κ·Όν μ μλλ‘ λ§λ€κΈ° μν μ§μΉ¨ μ§ν©.
 - ISO/IEC 27001: μ 보 보μ κ΄λ¦¬ μμ€ν μ λν κ΅μ  νμ€.
 
μ΄λ¬ν νμ€μ GASκ° μνΈ μ΄μ© κ°λ₯νκ³ μ κ·Ό κ°λ₯νλ©° μμ νκ³ μ λ’°ν μ μλλ‘ λ³΄μ₯νκΈ° μν νλ μμν¬λ₯Ό μ 곡ν©λλ€. μλ₯Ό λ€μ΄ QTI νμ€μ λ°λ₯΄λ©΄ νκ°λ₯Ό μ¬λ¬ μμ€ν  κ°μ μννκ² κ΅νν μ μμ΅λλ€. WCAG μ§μΉ¨μ μ€μνλ©΄ λͺ¨λ νμ΅μκ° λ₯λ ₯μ κ΄κ³μμ΄ νκ°μ μ κ·Όν μ μμ΅λλ€. ISO/IEC 27001μ ꡬννλ©΄ λ―Όκ°ν νκ° λ°μ΄ν°λ₯Ό λ¬΄λ¨ μ‘μΈμ€ λ° μ€μ©μΌλ‘λΆν° 보νΈνλ λ° λμμ΄ λ©λλ€.
μ ν μμ μ± κ΅¬νμ μ€μ  μ
GASμμ μ ν μμ μ±μ ꡬνν μ μλ λͺ κ°μ§ μ€μ  μλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
μ 1: μ«μ μ λ ₯ μ ν¨μ± κ²μ¬
μ§λ¬Έμμ νμμ΄ μμ μ λμ΄λ₯Ό λνλ΄λ μ«μ κ°μ μ λ ₯ν΄μΌ νλ€κ³ κ°μ ν©λλ€. μμ€ν μ μ λ ₯μ΄ μ€μ λ‘ μ«μμΈμ§ νμΈνκ³ ν©λ¦¬μ μΈ λ²μ(μ: 5μμ 100 μ¬μ΄) λ΄μ μλμ§ νμΈν΄μΌ ν©λλ€. λ€μμ Javaμμ μ΄λ₯Ό ꡬννλ λ°©λ²μ λλ€.
try {
    int age = Integer.parseInt(ageInput);
    if (age < 5 || age > 100) {
        throw new IllegalArgumentException("Age must be between 5 and 100");
    }
    // Process the age value
} catch (NumberFormatException e) {
    // Handle the case where the input is not a number
    System.err.println("Invalid age format: " + e.getMessage());
} catch (IllegalArgumentException e) {
    // Handle the case where the age is out of range
    System.err.println(e.getMessage());
}
μ 2: SQL μ½μ λ°©μ§
μ§λ¬Έμμ νμμ΄ λ°μ΄ν°λ² μ΄μ€μ μ μ₯λ μμ ν μ€νΈ μλ΅μ μ λ ₯ν μ μλ€κ³ κ°μ ν©λλ€. μμ€ν μ SQL μ½μ μ·¨μ½μ μ λ°©μ§νκΈ° μν΄ μ λ ₯μ μμ ν΄μΌ ν©λλ€. λ€μμ λ§€κ°λ³μνλ 쿼리λ₯Ό μ¬μ©νμ¬ Pythonμμ μ΄λ₯Ό ꡬννλ λ°©λ²μ λλ€.
import sqlite3
conn = sqlite3.connect('assessment.db')
cursor = conn.cursor()
# Never use string formatting to build SQL queries
# This is vulnerable to SQL injection
# response = input("Enter your response: ")
# query = f"SELECT * FROM responses WHERE response = '{response}'"
# cursor.execute(query)
# Use parameterized queries instead
response = input("Enter your response: ")
query = "SELECT * FROM responses WHERE response = ?"
cursor.execute(query, (response,))
results = cursor.fetchall()
for row in results:
    print(row)
conn.close()
μ 3: Pythonμμ μ ν ννΈ μ¬μ©
λμ μΌλ‘ μ λ ₯λ μΈμ΄μΈ Pythonμ μ ν ννΈλ‘λΆν° ν° μ΄μ μ μ»μ μ μμ΅λλ€. μ ν ννΈλ₯Ό μ¬μ©νλ©΄ λ³μ, ν¨μ μΈμ λ° λ°ν κ°μ μμ λ°μ΄ν° μ νμ μ§μ ν μ μμΌλ―λ‘ μ μ  λΆμ λꡬλ₯Ό μ¬μ©νμ¬ λ°νμ μ μ μ ν μ€λ₯λ₯Ό κ°μ§ν μ μμ΅λλ€. λ€μμ μμ λλ€.
def calculate_average(numbers: list[float]) -> float:
    """Calculates the average of a list of numbers."""
    if not numbers:
        return 0.0
    return sum(numbers) / len(numbers)
# Example usage
scores: list[float] = [85.5, 92.0, 78.5]
average_score: float = calculate_average(scores)
print(f"The average score is: {average_score}")
μ΄ μμμ μ ν ννΈ `list[float]`λ `numbers` μΈμκ° λΆλ μμμ  μ«μ λͺ©λ‘μ΄μ΄μΌ ν¨μ μ§μ νκ³ μ ν ννΈ `-> float`λ ν¨μκ° λΆλ μμμ  μ«μλ₯Ό λ°νν΄μΌ ν¨μ μ§μ ν©λλ€. `mypy`μ κ°μ μ μ  λΆμ λꡬλ μ΄λ¬ν μ ν ννΈλ₯Ό μ¬μ©νμ¬ `calculate_average` ν¨μμ λ¬Έμμ΄ λͺ©λ‘μ μ λ¬νλ κ²κ³Ό κ°μ μ ν μ€λ₯λ₯Ό κ°μ§ν μ μμ΅λλ€.
κ³Όμ  λ° ν₯ν λ°©ν₯
μ ν μμ μ±μ μλΉν μ΄μ μ μ 곡νμ§λ§ GASμμμ ꡬνμλ λͺ κ°μ§ κ³Όμ λ μμ΅λλ€.
- 볡μ‘μ±: μ ν μμ μ±μ ꡬννλ©΄ GASμ μ€κ³ λ° κ΅¬νμ 볡μ‘μ±μ΄ μΆκ°λμ΄ κ°λ°μκ° μ ν μμ€ν  λ° νλ‘κ·Έλλ° μΈμ΄μ λν λ κΉμ μ΄ν΄κ° νμν©λλ€.
 - μ±λ₯ μ€λ²ν€λ: μ ν κ²μ¬λ νΉν λμ μΌλ‘ μ λ ₯λ μΈμ΄μμ μΌλΆ μ±λ₯ μ€λ²ν€λλ₯Ό μ λ°ν μ μμ΅λλ€. κ·Έλ¬λ μ΄ μ€λ²ν€λλ μ€λ₯λ₯Ό λ°©μ§νλ μ΄μ μ λΉν΄ μ’ μ’ λ¬΄μν μ μμ΅λλ€.
 - λ κ±°μ μμ€ν : μ ν μμ μ±μ λ κ±°μ GASμ ν΅ν©νλ κ²μ μλΉν μ½λ 리ν©ν°λ§μ΄ νμν μ μμΌλ―λ‘ μ΄λ €μΈ μ μμ΅λλ€.
 
μ΄ λΆμΌμ μ°κ΅¬ κ°λ°μ μν ν₯ν λ°©ν₯μ λ€μκ³Ό κ°μ΅λλ€.
- μλνλ μ ν μΆλ‘ : λͺ μμ  μ ν μ£Όμμ νμμ±μ μ€μ¬ λ°μ΄ν° μ νμ μλμΌλ‘ μΆλ‘ νλ κΈ°μ κ°λ°.
 - GASμ λν 곡μμ μΈ λ°©λ²: GASμ μ νμ± λ° μ ν μμ μ±μ νμΈνκΈ° μν΄ κ³΅μμ μΈ λ°©λ² μ μ©.
 - νκ° νλͺ© κ°λ°μ μν μ ν μμ  API: κ΅μ‘μκ° νκ° νλͺ©μ λ μ½κ² μμ±νκ³ κ΄λ¦¬ν μ μλλ‘ νλ μ ν μμ  API μμ±.
 - λ¨Έμ λ¬λκ³Όμ ν΅ν©: λ¨Έμ λ¬λ κΈ°μ μ ν΅ν©νμ¬ μ ν κ΄λ ¨ μ€λ₯λ₯Ό μλμΌλ‘ κ°μ§νκ³ λ°©μ§ν©λλ€.
 
κ²°λ‘
μ ν μμ μ±μ μΌλ° νκ° μμ€ν μ μ€κ³ λ° κ΅¬νμμ μ€μν κ³ λ € μ¬νμ λλ€. μ ν κ΄λ ¨ μ€λ₯λ₯Ό λ°©μ§ν¨μΌλ‘μ¨ μ ν μμ μ±μ κ΅μ‘ νκ°μ μ λ’°μ±, μ ν¨μ± λ° λ³΄μμ ν₯μμμΌ νμμ΄ κ³΅μ νκ³ μ ννκ² νκ°λλλ‘ λ³΄μ₯ν©λλ€. μ ν μμ μ±μ ꡬννλ λ° μ΄λ €μμ΄ μμ μ μμ§λ§ μ΄μ μ λΉμ©λ³΄λ€ ν¨μ¬ ν½λλ€. μ μ  νμ΄ν, μ ν¨μ± κ²μ¬κ° μλ λμ  νμ΄ν, λ°μ΄ν° μμ , μμΈ μ²λ¦¬ λ° μ격ν ν μ€νΈλ₯Ό ν¬ν¨νλ λ€λ©΄μ μΈ μ κ·Ό λ°©μμ μ±νν¨μΌλ‘μ¨ κ°λ°μλ κ°λ ₯νκ³ μμ μ μ΄λ©° μμ ν GASλ₯Ό ꡬμΆν μ μμ΅λλ€. GASκ° κΈλ‘λ² κ΅μ‘ νκ²½μμ μ μ  λ 보νΈνλ¨μ λ°λΌ μ ν μμ μ±μ μ°μ μνλ κ²μ κ΅μ‘ νκ°μ νμ§κ³Ό 무결μ±μ 보μ₯νλ λ° νμμ μ λλ€.